local CommonOHOH = _G.CommonOHOH;
local M = CommonOHOH.class.new(script, CommonOHOH.files.ModelObject());
local ConnectClass=CommonOHOH.load.Connect();
local training_cfg = CommonOHOH.config.Training

function M.new(...)
	return M(...);
end;

function M.ctor(self,trianId,obj,player,dataStore,trainCtrl)

    self.player=player
    self.DataBase=dataStore

   self.TrainCtrl=trainCtrl
    --成功发生了一次训练
   self.HurtEvent= ConnectClass.new()
   -- 被砍死了
   self.DieEvent= ConnectClass.new()
    --重生
   self.RebornEvent= ConnectClass.new()

   self.isActive=false --是否激活可以训练

   self.TrainOpenEvent= ConnectClass.new()
   self.TrainCloseEvent= ConnectClass.new()

   self.guid=obj.Name.."_"..trianId
   self.cfg=training_cfg[trianId]
--    print("-------trianId-------",trianId)
   self.tid=self.cfg.id
   
   self:UpdateMaxHp()


   self.hp=self.maxHp
   self.addExp=self.cfg.add
   self.unlockLevelId=self.cfg.level --解锁等级 
   self.drop=self.cfg.drop --掉落
   self.weight=self.cfg.weight --权重

   self.cd=self.cfg.cd
   self.isVip=self.cfg.isVip==1 --是否是VIP


   self.DieEvent:Connect(function()
        self:AddProcess(function()
             self:Wait(0.2) --0.1秒后重生
             self:Reborn()
        end)
   end)



   M.super.ctor(self,obj);

    self.player.LevelChangeEvent:Connect(function()
        self:UpdateMaxHp()
    end)

end;

function M.GetTid(self)
    return self.tid
end


--获取玩家当前拥有的点数
function M.GetHadPoint(self)
    local PointsData=self.DataBase:GetData("Points")
    local sum=0
    sum=sum+PointsData.lucky
    sum=sum+PointsData.speed
    sum=sum+PointsData.had
    sum=sum+PointsData.damge
    sum=sum+PointsData.hp
    return sum
end


-- function GetToNumber(num)

--     local num= math.floor(num)
    
--     local str=tostring(num)

--     if string.len(str)<=3 then
--         return num
--     end

--     local subStr=string.sub(str,1,3)
--     local r=tonumber(subStr)
--     for i=1,string.len(str)-2 do
--         r=r*10
--     end
--     return r
-- end

function M.UpdateMaxHp(self)
    local points=self:GetHadPoint()
    local hp=(points*self.cfg.hp)/2
    local newHp=_G.CommonOHOH.load.GeneralTool().DigitsSignificantX(hp,3)
    if newHp>self.cfg.hp then
        self.maxHp=newHp
    else
        self.maxHp=self.cfg.hp
    end
end



function M.Reborn(self)
    self.hp=self.maxHp
    self.RebornEvent:Action()
end

--开启训练
function M.OpenTrian(self)
    self.isActive=true
    self.TrainOpenEvent:Action(self)
end

--关闭训练
function M.CloseTrian(self)
    self.isActive=false
	self.TrainCloseEvent:Action(self)
end


function M.dtor(self)
    self.HurtEvent:dtor()
    self.DieEvent:dtor()
    
    self.RebornEvent:dtor()
    self.TrainOpenEvent:dtor()
    self.TrainCloseEvent:dtor()

	M.super.dtor(self);
end;

--是否被激活
function M.IsActive(self)
   return  self.isActive
end

function M.GetHP(self)
    return self.hp
end

function M.GetAdd(self)
    return  self.addExp
end

function M.GetGuid(self)
    return  self.guid
end

-- 错误值：1，不是vip，2等级不够
-- 返回值,是否可以再次训练
function M.IsUnLock(self)
	if self.isVip  then --需要判断是否为IP
		if  self.DataBase:GetData("gamePass").gamepass_vip then
			return true
		else
			-- 显示购买Vip
			return  false,1
		end
	elseif self.DataBase:GetData("base").level>=self.unlockLevelId then
		return true
	else
		--提示等级不够
		return false,2
	end
end

-- 获取训练数值
function M.GetTrianValue(self)
    return self.TrainCtrl:GetTrianValue()
 end

 -- 获取加的经验值
function M.GetExpValue(self)

    return self.TrainCtrl:GetExpValue(self:GetAdd())
 end

--获取训练Cd
function M.GetTrianCd(self,weapon)
    return self.TrainCtrl:GetTrianCd(weapon)
end

-- 训练对象受伤
function M.Hurt(self)

    local damge=self:GetTrianValue()
    local oldHp=self.hp
    self.hp=self.hp-damge
    if self.hp<0 then
        self.hp=0    
        self.DieEvent:Action()
    else
        self.HurtEvent:Action( self.hp,damge,oldHp)
    end
    self.player.OneTrainEvent:Action()

end



return M
